排序
定義:排序是將資料依照某種順序(如升序或降序)排列的過程。
常見排序演算法:
1.冒泡排序:重複比較相鄰元素,交換順序錯誤的元素。
2.選擇排序:每次找到最小的元素放到序列的前端。
3.插入排序:將每個元素插入到已排序部分的正確位置。
4.快速排序:選擇基準點,分割資料並遞迴排序。
5.合併排序:分割資料並將排序後的小部分合併。
搜尋
定義:搜尋是在資料集中找到特定元素的過程。
程式練習題(Insertion sort):
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void sort(int [ ],int);
int main(void)
{
int i,a[30];
srand(time(NULL));
for(i=0;i<30;i++)a[i]=rand()%100;
for(i=0;i<30;i++)cout<<a[i]<<" ";
cout<<endl;
sort(a,30);
for(i=0;i<30;i++)cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void sort (int a[ ],int n)
{
int i,j,npw;
for(i=1;i<n;i++){
now = a[i];
for(j=i-1;j>=0 && now<a[j];j--)
a[j+1]=a[j];
a[j+1] = now;
}
}
說明:插入排序法對一個隨機生成的 30 個整數的陣列進行排序,透過 rand()
生成隨機數,然後使用 sort()
函數進行排序。插入排序的過程是遍歷陣列中的每個元素,將其插入到已排序的部分中,使整個陣列保持有序。程式最後會輸出排序前和排序後的陣列內容,展示排序結果。
程式練習題(Bubble sort):
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
#define SIZE 20
int main(void)
{
int a[SIZE];
int i, j, num, temp;
srand(time(NULL));
cout << "How many do you want (less than " << SIZE << "): ";
cin >> num;
for (i = 0; i < num; i++)
a[i] = rand() % 100;
for (i = 0; i < num - 1; i++) {
for (j = 1; j < num; j++) {
if (a[j - 1] > a[j]) {
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
for (i = 0; i < num; i++)
cout << a[i] << " ";
return 0;
}
說明:
首先生成小於 20 個的隨機數並儲存在陣列中,接著透過雙層迴圈進行氣泡排序,逐一比較相鄰的元素並進行交換,直到將陣列按升序排列。內層迴圈每次將最大的數移動到末尾,外層迴圈逐漸縮小未排序部分的範圍。最後,輸出排序後的陣列內容。
程式練習題(Sequential search)
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int search(int[], int, int);
int main(void)
{
int i, a[30], key, result;
cout << "欲搜尋的值:";
cin >> key;
srand(time(NULL));
for (i = 0; i < 30; i++)
a[i] = rand() % 10;
result = search(a, 30, key);
if (result == -1)
cout << "Not found!" << endl;
else
cout << "Found in index " << result << endl;
return 0;
}
int search(int a[], int n, int key)
{
for (int i = 0; i < n; i++)
if (a[i] == key)
return i;
return -1;
}
說明:
隨機生成 30 個 0 到 9 的整數,並讓使用者輸入要搜尋的數字,透過線性搜尋找到數字在陣列中的索引位置。search()
函數遍歷陣列,若找到與輸入的數字相同的元素,返回其索引;若未找到則返回 -1
,並在主程式中根據結果輸出「Found」或「Not found」。
!!以上內容是跟著第一次學C++第二版第15章一起做學習的!!